package com.baizhiedu.life;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

/**
 * @Author: hongsir
 * @Date: 2024/12/18 - 12 - 18 - 9:30
 * @Description: com.baizhiedu.life
 * @Version: 1.0
 */
/*
//1.实现InitializingBean接口
public class Product implements InitializingBean {
    public Product() {
        System.out.println("Product.Product");
    }

    //这个就是初始化方法：做一些初始化操作
    //Spring会进行调用
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }
}
*/

/*
//2.提供普通初始化方法
public class Product  {
    public Product() {
        System.out.println("Product.Product");
    }

    //这个就是初始化方法：做一些初始化操作（该方法为普通方法）
    public void myInit() {
        System.out.println("Product.myInit");
    }
}
*/

/*
* 3.既实现InitializingBean接口，又提供普通的初始化方法
* 1）InitializingBean
* 2）普通初始化方法
* 注入一定发生在初始化方法之前(通过afterPropertiesSet函数名也能看得出来)
* 什么叫做初始化操作
*   资源的初始化：初始化 IO 网络...
*
* 销毁阶段
*   Spring销毁对象前，会调用对象的销毁方法，完成销毁操作
*       1.Spring什么时候销毁创建的对象？
*           ctx.close();
*       2.销毁方法：程序员根据自己的需求，定义销毁方法，完成销毁操作
*            调用：Spring工厂完成调用
*       3.如何进行销毁操作
*           实现DisposableBean接口
*           定义一个普通的销毁方法，<bean destory-method="myDestory"/>
*       4.细节分析：
*           1）销毁方法的操作只适用于scope=“singleton”
*           2）什么叫做销毁操作
*               （1）主要指的就是 资源的释放操作 io.close() connection.close()
*/
public class Product implements InitializingBean, DisposableBean {
    private String name;

    public Product() {
        System.out.println("Product.Product");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Product.setName");
        this.name = name;
    }

    //这个就是初始化方法：做一些初始化操作（该方法为普通方法）
    public void myInit() {
        System.out.println("Product.myInit");
    }

    //这个就是初始化方法：做一些初始化操作
    //Spring会进行调用
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }

    //销毁操作：销毁操作（资源释放的操作）
    @Override
    public void destroy() throws Exception {
        System.out.println("Product.destroy");
    }

    public void myDestory() throws Exception {
        System.out.println("Product.myDestory");
    }
}